package net.servir.capacidades.dao.jdbc;

import java.util.LinkedList;
import java.util.List;
import java.util.Map;

import javax.sql.DataSource;

import net.servir.capacidades.dao.BancoPreguntaDAO;
import net.servir.capacidades.model.ArchivoBancoPregunta;
import net.servir.capacidades.model.ArchivoRespuestasOffLine;
import net.servir.capacidades.model.BancoPregunta;
import net.servir.capacidades.model.Pregunta;
import net.servir.capacidades.model.TmpLoadPregunta;
import net.servir.capacidades.model.jsp.JspPreguntas;
import net.servir.capacidades.model.xls.XlsColumnConfig;
import net.servir.capacidades.model.xls.XlsTableConfig;
import net.servir.capacidades.model.xls.XlsWorkbookConfig;
import net.servir.capacidades.model.xls.XlsWorksheetConfig;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.simple.SimpleJdbcTemplate;
import org.springframework.stereotype.Repository;

@Repository
public class JdbcBancoPreguntaDAO implements BancoPreguntaDAO {

	private SimpleJdbcTemplate jdbcTemplate;
	private DataSource dataSource;
	
	@Autowired
	private JdbcCapacidadesDAO jdbcCapacidadesDao;
	
	@Autowired
	public JdbcBancoPreguntaDAO(DataSource dataSource){
		this.jdbcTemplate = new SimpleJdbcTemplate(dataSource);
		this.dataSource = dataSource;
	}

	public List<BancoPregunta> getBancosPregunta() {

		List<BancoPregunta> list = new LinkedList<BancoPregunta>();

		StringBuilder sql = new StringBuilder();
		sql.append("SELECT ID_BANCO_PREGUNTA,to_char(FEC_APERTURA,'DD/MM/YYYY') as FEC_APERTURA,to_char(FEC_CIERRE,'DD/MM/YYYY') as FEC_CIERRE,ESTADO,BANCO_PREGUNTA,ID_SISTEMA,COD_USUARIO_CREA,to_char(FECHA_CREACION,'DD/MM/YYYY HH24:MI') as FECHA_CREACION,COD_USUARIO_MODIFICA,to_char(FECHA_MODIFICACION,'DD/MM/YYYY HH24:MI') as FECHA_MODIFICACION");
		sql.append(",(select acronimo from sistema where id_sistema = BANCO_PREGUNTA.id_sistema) as sistema");
		sql.append(" FROM BANCO_PREGUNTA");

		List<Map<String, Object>> collec = jdbcTemplate.queryForList(sql.toString());
		for(Map<String, Object> rec : collec){
			BancoPregunta obj = new BancoPregunta();
			obj.setId_banco_pregunta((Number)rec.get("ID_BANCO_PREGUNTA"));
			obj.setFec_apertura((String)rec.get("FEC_APERTURA"));
			obj.setFec_cierre((String)rec.get("FEC_CIERRE"));
			obj.setEstado((String)rec.get("ESTADO"));
			obj.setBanco_pregunta((String)rec.get("BANCO_PREGUNTA"));
			obj.setId_sistema((Number)rec.get("ID_SISTEMA"));
			obj.setCod_usuario_crea((String)rec.get("COD_USUARIO_CREA"));
			obj.setFecha_creacion((String)rec.get("FECHA_CREACION"));
			obj.setCod_usuario_modifica((String)rec.get("COD_USUARIO_MODIFICA"));
			obj.setFecha_modificacion((String)rec.get("FECHA_MODIFICACION"));
			
			obj.setSistema((String)rec.get("SISTEMA"));

			list.add(obj);
		}
		return list;

	}
	public BancoPregunta getBancoPregunta(Number idBancoPregunta) {

		BancoPregunta obj = null;

		StringBuilder sql = new StringBuilder();
		sql.append("SELECT ID_BANCO_PREGUNTA,to_char(FEC_APERTURA,'DD/MM/YYYY') as FEC_APERTURA,to_char(FEC_CIERRE,'DD/MM/YYYY') as FEC_CIERRE,ESTADO,BANCO_PREGUNTA,ID_SISTEMA,COD_USUARIO_CREA,to_char(FECHA_CREACION,'DD/MM/YYYY HH24:MI') as FECHA_CREACION,COD_USUARIO_MODIFICA,to_char(FECHA_MODIFICACION,'DD/MM/YYYY HH24:MI') as FECHA_MODIFICACION");
		sql.append(" FROM BANCO_PREGUNTA WHERE ID_BANCO_PREGUNTA = ? ");

		List<Map<String, Object>> collec = jdbcTemplate.queryForList(sql.toString(),idBancoPregunta);
		for(Map<String, Object> rec : collec){
			obj = new BancoPregunta();
			obj.setId_banco_pregunta((Number)rec.get("ID_BANCO_PREGUNTA"));
			obj.setFec_apertura((String)rec.get("FEC_APERTURA"));
			obj.setFec_cierre((String)rec.get("FEC_CIERRE"));
			obj.setEstado((String)rec.get("ESTADO"));
			obj.setBanco_pregunta((String)rec.get("BANCO_PREGUNTA"));
			obj.setId_sistema((Number)rec.get("ID_SISTEMA"));
			obj.setCod_usuario_crea((String)rec.get("COD_USUARIO_CREA"));
			obj.setFecha_creacion((String)rec.get("FECHA_CREACION"));
			obj.setCod_usuario_modifica((String)rec.get("COD_USUARIO_MODIFICA"));
			obj.setFecha_modificacion((String)rec.get("FECHA_MODIFICACION"));

		}
		return obj;

	}	
	public String validarEliminarBancoPregunta(Number idBancoPregunta)
	{
		String mensaje = "";

		StringBuilder sql = new StringBuilder();
		sql.append("SELECT count(*) ");
		sql.append(" FROM TEST WHERE ID_BANCO_PREGUNTA = ? AND VALIDO = 1 ");

		int nroAmbitos = jdbcTemplate.queryForInt(sql.toString(), idBancoPregunta);
		if (nroAmbitos > 0)
			mensaje = "El Banco de Preguntas tiene exámenes registrados, primero debe eliminar los examenes o cambiarles de Banco de Pregunta";
		
		return mensaje;

	}
	public void eliminarBancoPregunta(Number idBancoPregunta)
	{
		StringBuilder sql = new StringBuilder();
		
		//Eliminamos todos sus dependientes
		sql.append("DELETE FROM PREGUNTA ");
		sql.append(" WHERE ID_BANCO_PREGUNTA = ?");			
		
		this.jdbcTemplate.update(sql.toString(),idBancoPregunta);			
		

		//Eliminamos al objeto principal
		sql = new StringBuilder();
		sql.append("DELETE FROM BANCO_PREGUNTA ");
		sql.append(" WHERE ID_BANCO_PREGUNTA = ?");			
		
		this.jdbcTemplate.update(sql.toString(),idBancoPregunta);			
		
	}	
	public Number grabarBancoPregunta(BancoPregunta bancoPregunta)
	{
		StringBuilder sql = new StringBuilder();
		Number idBancoPregunta = null;
		if (bancoPregunta.getId_banco_pregunta() == null)
		{			 
			idBancoPregunta =  this.jdbcTemplate.queryForInt("Select nvl(max(id_banco_pregunta),0) + 1 from banco_pregunta");
			
			//Seteamos el estado como vigente
			bancoPregunta.setId_banco_pregunta(idBancoPregunta);

			sql = new StringBuilder();
			sql.append("INSERT INTO BANCO_PREGUNTA(ID_BANCO_PREGUNTA,FEC_APERTURA,FEC_CIERRE,ESTADO,BANCO_PREGUNTA,ID_SISTEMA,COD_USUARIO_CREA,FECHA_CREACION,COD_USUARIO_MODIFICA,FECHA_MODIFICACION)");
			sql.append(" VALUES (?,to_date(?,'DD/MM/YYYY'),to_date(?,'DD/MM/YYYY'),?,?,?,?,to_date(?,'DD/MM/YYYY HH24:MI'),?,to_date(?,'DD/MM/YYYY HH24:MI'))");

			this.jdbcTemplate.update(sql.toString(),bancoPregunta.getId_banco_pregunta(),bancoPregunta.getFec_apertura(),bancoPregunta.getFec_cierre(),bancoPregunta.getEstado(),bancoPregunta.getBanco_pregunta(),bancoPregunta.getId_sistema(),bancoPregunta.getCod_usuario_crea(),bancoPregunta.getFecha_creacion(),bancoPregunta.getCod_usuario_modifica(),bancoPregunta.getFecha_modificacion());
		}
		else
		{
			idBancoPregunta = bancoPregunta.getId_banco_pregunta();
			
			sql = new StringBuilder();
			sql.append("UPDATE BANCO_PREGUNTA SET FEC_APERTURA = to_date(?,'DD/MM/YYYY'),FEC_CIERRE = to_date(?,'DD/MM/YYYY'),ESTADO = ?,BANCO_PREGUNTA = ?,ID_SISTEMA = ?,COD_USUARIO_CREA = ?,FECHA_CREACION = to_date(?,'DD/MM/YYYY HH24:MI'),COD_USUARIO_MODIFICA = ?,FECHA_MODIFICACION = to_date(?,'DD/MM/YYYY HH24:MI')");
			sql.append(" WHERE ID_BANCO_PREGUNTA = ?");

			this.jdbcTemplate.update(sql.toString(),bancoPregunta.getFec_apertura(),bancoPregunta.getFec_cierre(),bancoPregunta.getEstado(),bancoPregunta.getBanco_pregunta(),bancoPregunta.getId_sistema(),bancoPregunta.getCod_usuario_crea(),bancoPregunta.getFecha_creacion(),bancoPregunta.getCod_usuario_modifica(),bancoPregunta.getFecha_modificacion(),bancoPregunta.getId_banco_pregunta());
			
		}
		return idBancoPregunta;
		
	}
	public List<Pregunta> getPreguntasFiltro(JspPreguntas objJsp,XlsWorkbookConfig xlsWorkbookConfig)
	{
		List<Pregunta> list = new LinkedList<Pregunta>();
		//ID_SECTOR_PREGUNTA=>ID_NIVEL_GOBIERNO
		StringBuilder sql = new StringBuilder();
		sql.append("SELECT P.ID_PREGUNTA,P.ID_PREGUNTA_TIPO,P.ID_BANCO_PREGUNTA,P.PREGUNTA,P.RESPUESTA,P.ALTERNATIVA_1");
		sql.append(" ,P.ALTERNATIVA_2,P.ALTERNATIVA_3,P.ALTERNATIVA_4,P.COD_SOLO_GN,P.COD_OTRO_SECTOR,P.COD_ORDEN,P.USUARIO_ACT,to_char(P.FEC_ACT,'DD/MM/YYYY') as FEC_ACT");
		sql.append(" ,P.ID_FUNCION,P.GRUPO_SIMILITUD,P.ID_PREGUNTA_SERVICIO,P.GRADO_DIFICULTAD,P.JUSTIFICACION,P.ESTADO");
		sql.append(" ,F.NEMOTECNICO AS FUNCION");
		sql.append(" FROM PREGUNTA P LEFT JOIN FUNCION F ON P.ID_FUNCION = F.ID_FUNCION ");
		sql.append(" WHERE 1 = 1 ");
		if(objJsp.getId_banco_pregunta() != null)
			sql.append(" AND P.ID_BANCO_PREGUNTA = ").append(objJsp.getId_banco_pregunta());
		if(objJsp.getPregunta() != null)
			sql.append(" AND upper(P.PREGUNTA) like upper('%").append(objJsp.getPregunta()).append("%')");
//		if(objJsp.getId_nivel_gobierno() != null)
//			sql.append(" AND P.ID_NIVEL_GOBIERNO = ").append(objJsp.getId_nivel_gobierno());
		if(objJsp.getId_funcion() != null)
			sql.append(" AND P.ID_FUNCION = ").append(objJsp.getId_funcion());
		if(objJsp.getId_pregunta_tipo() != null)
			sql.append(" AND P.ID_PREGUNTA_TIPO = ").append(objJsp.getId_pregunta_tipo());
		if(objJsp.getId_pregunta_servicio() != null)
			sql.append(" AND P.ID_PREGUNTA_SERVICIO = ").append(objJsp.getId_pregunta_servicio());
		if(objJsp.getEstado() != null)
			sql.append(" AND P.ESTADO = ").append(objJsp.getEstado());
		
//		System.out.println("===========================================================================");
//		System.out.println("getPreguntasFiltro(JspPreguntas objJsp,XlsWorkbookConfig xlsWorkbookConfig)");
//		System.out.println("===========================================================================");
//		System.out.println(sql.toString());
		List<Map<String, Object>> collec = jdbcTemplate.queryForList(sql.toString());
		for(Map<String, Object> rec : collec){
			Pregunta obj = new Pregunta();
			obj.setId_pregunta((Number)rec.get("ID_PREGUNTA"));
//			obj.setId_nivel_gobierno((Number)rec.get("ID_NIVEL_GOBIERNO"));
			obj.setId_pregunta_tipo((Number)rec.get("ID_PREGUNTA_TIPO"));
			obj.setId_banco_pregunta((Number)rec.get("ID_BANCO_PREGUNTA"));
			obj.setPregunta((String)rec.get("PREGUNTA"));
			obj.setRespuesta((String)rec.get("RESPUESTA"));
			obj.setAlternativa_1((String)rec.get("ALTERNATIVA_1"));
			obj.setAlternativa_2((String)rec.get("ALTERNATIVA_2"));
			obj.setAlternativa_3((String)rec.get("ALTERNATIVA_3"));
			obj.setAlternativa_4((String)rec.get("ALTERNATIVA_4"));
			obj.setCod_solo_gn((Number)rec.get("COD_SOLO_GN"));
			obj.setCod_otro_sector((Number)rec.get("COD_OTRO_SECTOR"));
			obj.setCod_orden((String)rec.get("COD_ORDEN"));
			obj.setUsuario_act((String)rec.get("USUARIO_ACT"));
			obj.setFec_act((String)rec.get("FEC_ACT"));
			obj.setId_funcion((Number)rec.get("ID_FUNCION"));
			obj.setGrupo_similitud((String)rec.get("GRUPO_SIMILITUD"));
			obj.setId_pregunta_servicio((Number)rec.get("ID_PREGUNTA_SERVICIO"));
			obj.setGrado_dificultad((Number)rec.get("GRADO_DIFICULTAD"));
			obj.setJustificacion((String)rec.get("JUSTIFICACION"));
			obj.setEstado((Number)rec.get("ESTADO"));
			obj.setFuncion((String)rec.get("FUNCION"));
//			obj.setId_sistema_etapa((Number)rec.get("ID_SISTEMA_ETAPA"));
			list.add(obj);
		}
		//************************************************************************
		//Generamos la configuración de la exportación a Excel
		//************************************************************************
		List<XlsColumnConfig> columns = new LinkedList<XlsColumnConfig>();
		columns.add(new XlsColumnConfig("ID_PREGUNTA","Cod Pregunta","INTEGER",15));
		columns.add(new XlsColumnConfig("PREGUNTA","Pregunta","STRING",70));
		columns.add(new XlsColumnConfig("RESPUESTA","Respuesta","STRING",70));
		columns.add(new XlsColumnConfig("ALTERNATIVA_1","Alternativa 1","STRING",40));
		columns.add(new XlsColumnConfig("ALTERNATIVA_2","Alternativa 2","STRING",40));
		columns.add(new XlsColumnConfig("ALTERNATIVA_3","Alternativa 3","STRING",40));
		columns.add(new XlsColumnConfig("ALTERNATIVA_4","Alternativa 4","STRING",40));
		columns.add(new XlsColumnConfig("JUSTIFICACION","Justificación","STRING",40));
//		columns.add(new XlsColumnConfig("ID_NIVEL_GOBIERNO","Nivel Gobierno","INTEGER",10));
		columns.add(new XlsColumnConfig("COD_OTRO_SECTOR","Cod. Sector","INTEGER",10));
		columns.add(new XlsColumnConfig("ID_FUNCION","Cod. Función","INTEGER",10));
		columns.add(new XlsColumnConfig("ID_PREGUNTA_TIPO","Cod. Tipo Preguna","INTEGER",10));
		columns.add(new XlsColumnConfig("ID_PREGUNTA_SERVICIO","Preg. Servicio/Obra","INTEGER",14));
		columns.add(new XlsColumnConfig("GRUPO_SIMILITUD","Grupo Similitud","STRING",10));
		columns.add(new XlsColumnConfig("GRADO_DIFICULTAD","Grado Dificultad","STRING",10));
		columns.add(new XlsColumnConfig("COD_ORDEN","Orden Alternativa\n????E","STRING",12));
		columns.add(new XlsColumnConfig("ESTADO","Estado","INTEGER",8));
//		columns.add(new XlsColumnConfig("ID_SISTEMA_ETAPA","Cod.Sistema.Administrativo","INTEGER",10));
		
		List<XlsTableConfig> tables = new LinkedList<XlsTableConfig>();
		tables.add(new XlsTableConfig(sql.toString(),columns));
		
		List<XlsWorksheetConfig> sheets = new LinkedList<XlsWorksheetConfig>();
		sheets.add(new XlsWorksheetConfig("Preguntas",tables));

		//Generamos las tablas de la hoja codigos
		tables = new LinkedList<XlsTableConfig>();
		
		sql = new StringBuilder();		
		sql.append("select id_sector_pregunta as cod_pregunta, sector_pregunta as descripcion ");
		sql.append(" from sector_pregunta where id_sector_pregunta> 0 ");
		sql.append(" order by id_sector_pregunta");
		tables.add(new XlsTableConfig(sql.toString(),1,1));
		
		sql = new StringBuilder();		
		sql.append("Select id_funcion as cod_funcion, descripcion, nemotecnico from funcion");
		sql.append(" where id_etapa in (select id_etapa from etapa e join ambito a  on e.id_ambito = a.id_ambito");
		sql.append(" where a.id_sistema = ").append(objJsp.getId_sistema()).append(")");
		sql.append(" order by id_funcion");
		tables.add(new XlsTableConfig(sql.toString(),1,4));

		sql = new StringBuilder();		
		sql.append("select id_pregunta_tipo as cod_tipo_pregunta, pregunta_tipo as descripcion from pregunta_tipo");
		sql.append(" where id_sistema = ").append(objJsp.getId_sistema());
		sql.append(" order by id_pregunta_tipo");
		tables.add(new XlsTableConfig(sql.toString(),1,8));		
		
		sql = new StringBuilder();		
		sql.append("select id_pregunta_servicio as cod_servicio_pregunta, pregunta_servicio as descripcion from pregunta_servicio");
		sql.append(" where id_sistema = ").append(objJsp.getId_sistema());
		sql.append(" order by id_pregunta_servicio");
		tables.add(new XlsTableConfig(sql.toString(),1,11));		

		sql = new StringBuilder();		
		sql.append("select 0 as estado ,'Inactivo' as descripcion from dual");
		sql.append(" UNION ALL select 1 as estado ,'Activo' as descripcion from dual");
		tables.add(new XlsTableConfig(sql.toString(),1,14));
		
//		sql = new StringBuilder();		
//		sql.append("SELECT ID_SISTEMA_ETAPA COD_SISTEMA_ADMINISTRATIVO, DES_SISTEMA_ETAPA DESCRIPCION FROM CENSOABAST.SISTEMA_ETAPA");
//		tables.add(new XlsTableConfig(sql.toString(),1,17));
//	
//		sheets.add(new XlsWorksheetConfig("Códigos",tables));
		
		xlsWorkbookConfig.setName("BancoPreguntas_" + objJsp.getId_banco_pregunta());
		xlsWorkbookConfig.setSheets(sheets);
		
		//************************************************************************
		
		return list;
		
	}
	public String validarEliminarPregunta(Number idPregunta)
	{
		String mensaje = "";

		//TODO:
		
		return mensaje;		
	}
	public void eliminarPregunta(Number idPregunta)
	{
		StringBuilder sql = new StringBuilder();
		
		//Cambiamos de estado a la pregunta
		sql = new StringBuilder();
		sql.append("UPDATE PREGUNTA SET ESTADO = 0 ");
		sql.append(" WHERE ID_PREGUNTA = ?");			
		
		this.jdbcTemplate.update(sql.toString(),idPregunta);	
		
	}
	public void eliminarPreguntasTmp(String codSession)
	{
		StringBuilder sql = new StringBuilder();
		
		//Cambiamos de estado a la pregunta
		sql = new StringBuilder();
		sql.append("DELETE FROM TMP_LOAD_PREGUNTA ");
		sql.append(" WHERE COD_SESSION = ?");			
		
		this.jdbcTemplate.update(sql.toString(),codSession);	

	}
	
	public void registrarPreguntasTmp(List<TmpLoadPregunta> lstPreguntas)
	{
		StringBuilder sql = new StringBuilder();
		
		for (TmpLoadPregunta tmpLoadPregunta : lstPreguntas) {
			
			sql = new StringBuilder();
			sql.append("INSERT INTO TMP_LOAD_PREGUNTA(COD_SESSION,ID_PREGUNTA,ID_NIVEL_GOBIERNO,ID_PREGUNTA_TIPO,ID_BANCO_PREGUNTA,");
			sql.append(" PREGUNTA,RESPUESTA,ALTERNATIVA_1,ALTERNATIVA_2,ALTERNATIVA_3,ALTERNATIVA_4,COD_SOLO_GN,COD_OTRO_SECTOR,");
			sql.append(" COD_ORDEN,ID_FUNCION,GRUPO_SIMILITUD,ID_PREGUNTA_SERVICIO,GRADO_DIFICULTAD,JUSTIFICACION,ESTADO,LOG_CARGA,VALIDO,FILA_EXCEL");
			sql.append(",ID_SISTEMA_ETAPA");
			sql.append(")");
			sql.append(" VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)");

			this.jdbcTemplate.update(sql.toString(),tmpLoadPregunta.getCod_session(),tmpLoadPregunta.getId_pregunta(),tmpLoadPregunta.getId_nivel_gobierno(),tmpLoadPregunta.getId_pregunta_tipo(),tmpLoadPregunta.getId_banco_pregunta()
					,tmpLoadPregunta.getPregunta(),tmpLoadPregunta.getRespuesta(),tmpLoadPregunta.getAlternativa_1(),tmpLoadPregunta.getAlternativa_2(),tmpLoadPregunta.getAlternativa_3(),tmpLoadPregunta.getAlternativa_4(),tmpLoadPregunta.getCod_solo_gn(),tmpLoadPregunta.getCod_otro_sector()
					,tmpLoadPregunta.getCod_orden(),tmpLoadPregunta.getId_funcion(),tmpLoadPregunta.getGrupo_similitud(),tmpLoadPregunta.getId_pregunta_servicio(),tmpLoadPregunta.getGrado_dificultad(),tmpLoadPregunta.getJustificacion(),tmpLoadPregunta.getEstado(),tmpLoadPregunta.getLog_carga(),tmpLoadPregunta.getValido(),tmpLoadPregunta.getFila_excel()
					,tmpLoadPregunta.getId_sistema_etapa());
		}
	}
	
	
	public void registrarRespuestas(List<ArchivoRespuestasOffLine> lstPreguntas)
	{
		StringBuilder sql = new StringBuilder();
		
		for (ArchivoRespuestasOffLine tmpOffLine : lstPreguntas) {
			//System.out.println("funcionalidad nueva de registro de preguntas");
			sql = new StringBuilder();
			sql.append("update preguntas_generadas pg set pg.respuesta_seleccionada = ? ");
			sql.append(" where exists (select 1 from test_generado tg join participante par on par.id_participante = tg.id_participante ");
			sql.append(" join servicio_civil sc on sc.id_servicio_civil = par.id_servicio_civil ");
			sql.append(" where sc.dni = ? and par.id_test = ? and pg.id_test_generado = tg.id_test_generado and pg.secuencia = ?)");
			
			this.jdbcTemplate.update(sql.toString(), tmpOffLine.getRespuesta(), tmpOffLine.getDni(), tmpOffLine.getId_test(), tmpOffLine.getNumero_pregunta());
		}
	}

	
	public void validarImportacionPreguntas(String codSession,Number idBancoPregunta )
	{
		StringBuilder sql = new StringBuilder();
		//Ejecutamos la validación de los datos		
		
		sql = new StringBuilder();
		sql.append("CALL BCO_PREGUNTA.VALIDAR_IMPORT_PREGUNTA(?,?)");

		this.jdbcTemplate.update(sql.toString(),codSession,idBancoPregunta);
	}	
	public void procesarImportacionPreguntas(String codSession,Number idBancoPregunta )
	{
		StringBuilder sql = new StringBuilder();
		//Ejecutamos la validación de los datos		
		
		sql = new StringBuilder();
		sql.append("CALL BCO_PREGUNTA.PROCESAR_IMPORT_PREGUNTA(?,?)");

		this.jdbcTemplate.update(sql.toString(),codSession,idBancoPregunta);
	}	

	public void setResumenCargaPreguntas(String codSession,ArchivoBancoPregunta obj)
	{
		StringBuilder sql = new StringBuilder();
		sql.append("SELECT count(*) as nro_leidos,sum(case when nvl(valido,0) = 0 then 1 else 0 end) as nro_error");
		sql.append(" ,sum(case when valido = 1 and id_pregunta is null then 1 else 0 end) as nro_nuevo");
		sql.append(" ,sum(case when valido = 1 and id_pregunta is not null and estado = 1 then 1 else 0 end) as nro_modificado");
		sql.append(" ,sum(case when valido = 1 and id_pregunta is not null and estado = 0 then 1 else 0 end) as nro_baja");
		sql.append(" FROM tmp_load_pregunta where cod_session = ?");

		List<Map<String, Object>> collec = jdbcTemplate.queryForList(sql.toString(),codSession);
		for(Map<String, Object> rec : collec){
			
			obj.setNro_leidos((Number)rec.get("Nro_leidos"));
			obj.setNro_error((Number)rec.get("Nro_error"));
			obj.setNro_nuevo((Number)rec.get("Nro_nuevo"));
			obj.setNro_modificado((Number)rec.get("Nro_modificado"));
			obj.setNro_baja((Number)rec.get("Nro_baja"));
			if (obj.getNro_leidos() != null && obj.getNro_leidos().intValue() > 0 )
				obj.setMostrar_resumen(1);
		}
	}
	
	public void cambiarEstadoPregunta(Number idPregunta)
	{
		StringBuilder sql = new StringBuilder();
		//Ejecutamos la validación de los datos		
		
		sql = new StringBuilder();
		sql.append("UPDATE PREGUNTA SET ESTADO = CASE WHEN ESTADO = 1 THEN 0 ELSE 1 END");
		sql.append(" WHERE ID_PREGUNTA = ? ");

		this.jdbcTemplate.update(sql.toString(),idPregunta);		
	}
	
}
